package com.demo.web;

import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import java.util.ArrayList;
import java.util.Random;

@SpringBootApplication
@Slf4j
public class GcOverheadOOM {

    public static int num2 = 0;

    public static void main(String[] args) {
        // 运行本程序之前请先设置VM Options
        // 执行垃圾收集的时间比例太大， 有效的运算量太小，默认情况下,，如果GC花费的时间超过 98%， 并且GC回收的内存少于 2%， JVM就会抛出这个错误。
        // -Xms10m -Xmx10m -XX:+PrintGCDetails -XX:MaxDirectMemorySize=5m
        // Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded
        ArrayList<Integer> nums = new ArrayList<>();

        while (true) {
            // 相比较HeapSpace, 这里是捕获了异常
            try {
                num2++;
                nums.add(num2);
            } catch (Exception e) {
                System.out.println(num2);
                e.printStackTrace();
            }
        }

    }


}
